package com.itfreer.data.general;

import java.util.HashMap;
import java.util.List;

/**
 * 类功能说明 定义一个表的基本信息
 * 2014.6.4
 */
public interface ITableInfo extends IDomainInfo {
	
	/**
	 * @Title: getTableName
	 * @Description: 获取表名称
	 * @param @return
	 * @return String 返回类型
	 * @throws
	 */
	String getTableName();

	/**
	 * @Title: getMetadataTableName
	 * @Description: 结构表名
	 * @param @return
	 * @return String 返回类型
	 * @throws
	 */
	String getMetadataTableName();

	/**
	 * @Title: getMetadataTableAliasName
	 * @Description: 表结构别名
	 * @param @return
	 * @return String 返回类型
	 * @throws
	 */
	String getMetadataTableAliasName();
	
	/**
	 * 获取表类型
	 */
	TableType getTableType();

	/**
	 * 获取字段信息
	 */
	Field[] getFields();

	/**
	 * 获取字段总数
	 */
	int getFieldCount();

	/**
	 * 获取主键，非自动填充
	 */
	Field[] getKeyNoAutoFields();

	/**
	 * 获取唯一值，非key和auto
	 */
	Field[] getUniqueFields();
	
	/**
	 * 获取唯一值分组缓存
	 * @return
	 */
	HashMap<String, List<Field>> getUniqueFieldMap();

	/**
	 * 获取自动增值字段
	 */
	Field[] getAutoFields();

	/**
	 * 获取查询字符串
	 */
	String getSelectFields(boolean onlyCanShow);

	/**
	 * 根据字段名获取字段信息 fieldName 字段名
	 */
	Field getField(String fieldName);

	/**
	 * 获取主键
	 */
	Field[] getKeyFields();

	/**
	 * 获取主键
	 */
	Field[] getKeyAndAutoFields();

	/**
	 * 表关系
	 */
	RelationNode getRelation();

	/**
	 * 获取简单分组
	 */
	String getTableGroup();
	
	/**
	 * 获取GUID字段名称
	 * @return
	 */
	String getGUIDFieldName();
	
	/**
	 * 获取版本字段名称
	 * @return
	 */
	String getVersionFieldName();
}